<?php

namespace App\Http\Controllers;
// use App\Http\Controllers\Controller; // 因为在同一个目录所以不用写引入
use Illuminate\Http\Request;
use Input;
//引入门面
use DB;
//引入模型
use App\Home\Member;
use Mockery\Matcher\AndAnyOtherArgs;
use Session;
//引入cache
use Cache;

class TestController extends Controller
{
    //测试控制器路由使用
    public function test1()
    {
        //输出任意信息
        phpinfo();
    }

    //test2测试Input获取数据
    public function test2()
    {
        //获取一个值,如果没有则使用第二个参数当默认值
        echo Input::get('id','10086').'<br/>';
        //获取全部的值 (数组形式返回)
        $all = Input::all();
        // var_dump($all);
        dd($all); // dump + die
        //获取指定的信息
        dd(Input::get('name'));
        //获取指定的几个值
        dd(Input::only(['id','name']));
        //获取除了指定的值,之外的值
        dd(Input::except(['name']));
        //判断某个值存在与否
        dd(Input::has('gender'));
    }


    //增删改查方法
    //增加
    public function add()
    {
        //定义关联操作的表
        $db = DB::table('member');
        //使用insert增加记录
        $result = $db->insert([
            [
                'name' => '马冬梅',
                'age' => '18',
                'email' => 'madongmei@qq.com'
            ],
            [
                'name' => '马chun梅',
                'age' => '28',
                'email' => 'madongmei@qq.com'
            ]
        ]);
        //dd($result); // 注意 使用任何打印调试都会 一条数据重复插入两次

        //插入一条记录返回id insertGetId
        // $result = $db->insertGetId([
        //     'name'=> '麻球',
        //     'age'=> '20',
        //     'email'=> 'maqiu@qq.com'
        // ]);
        // dd($result) ;
    }

    //修改方法
    public function update()
    {
        //定义需要操作的数据表
        $db = DB::table('member');
        $result = $db->where('id','=','83')->update([
            //需修改字段的键值对
            'name'  =>  '张三丰1',
        ]);
    }

    public function select()
    {
        $db = DB::table('member');
        //查询全部的数据
        $data = $db->get();
        //尝试循环数据
        foreach($data as $key=>$value){
            echo "id是: {$value->id}, 名字是: {$value->name},  邮箱是: {$value->email} <br/> ";
        }
        // dd($data);
        //查询id大于87的数据
        // $data =  $db->where('id','>',87)->get();

        //查询id大于86并且年龄小于28
        // $data = $db->where('id','>',86)->where('age','<','28')->get();
        //    $data = $db->where('id','>','86')->orWhere('age','<','28')->get();

        //取出单行记录
        // $data = $db->first();

        //取出指定字段的值
        // $data = DB::table('member')->where('id','89')->value('name');

        //查询指定的一些字段的值
        // $data =  DB::table('member')->select('name','email')->get();

        //分页操作
        $data =  DB::table('member')->limit(2)->offset(1)->get();
    }

    //删除操作
    public function del()
    {
        $db = DB::table('member');
        $result = $db->where('id','89')->delete();

    }

    public function test3()
    {
        $date = date('Y-m-d H:i:s',time());
        $day = '日';
        //展示视图
        //传递时间戳
        $time = strtotime('+1 year');
        // return view('home.test.test3',['date'=>$date,'day'=>$day]);
        // dd(compact('date','day','time'));
        return view('home.test.test3',compact('date','day','time'));
    }

    //循环标签
    public function test4()
    {
        $data = DB::table('member')->get();
        return view('home.test.test4',compact('data'));
    }

    //模板继承
    public function test5()
    {
        return view('home.test.test5');
    }

    //展示基础的表单
    public function test6()
    {
        return view('home.test.test6');
    }
    //处理请求
    public function test7()
    {
        return '请求提交成功!';
    }

    //模型的增删改查
    //添加操作
    public function test8(Request $request)
    {
        //实例化模型,将表和类映射起来
        $model = new Member();
        //给属性赋值,将字段与类的属性映射起来
        // $model->name = '杨年过';
        // $model->age = '34';
        // $model->email = 'yangnianguo@qq.com';
        // //去做具体的操作,将记录映射到实例
        // $result = $model->save();

        //方法2的添加操作
        $result = $model -> create($request -> all());
    }

    //模板
    public function test12()
    {
        return view('home.test.test12');
    }

    //查询操作
    public function test9()
    {
        //查询指定主键的记录
        // $data  = Member::find(95)->toArray();
        //查询符合条件的第一条记录
        // $data = Member::where('id','>',90)->first();
        //all方法
        $data = Member::where('id','>',90)->get();

    }
    //修改操作
    public function test10()
    {
        //AR 模式的修改操作
        // $data = Member::find(95);
        // $data->email = 'admi@qq.com';
        // $result = $data->save();

        //使用update方法进行更新操作
        $result = Member::where('id','95')->update([
            'age'   =>  '90'
        ]);
    }
    //删除操作
    public function test11()
    {
        $data = Member::find(88);
        $result = $data->delete();
    }

    //测试自动验证
    public function test13(Request $request)
    {
        //判断请求类型
        // echo Input::method();
        if(Input::method() == 'POST'){
            //自动验证
            $this->validate($request, [
                //具体规则
                'name' => 'required|min:2|max:20',
                'age' => 'required|integer|min:1|max:100',
                'email' => 'required|email',
                'captcha' => 'required|captcha'
            ]);
        }else{
            //展示视图
            return view('home.test.test13');
        }
    }

    //文件上上传
    public function test14(Request $request)
    {
        if(Input::method() == 'POST'){
            //上传文件
            //判断文件是否正常
            if($request->hasFile('avatar') && $request->file('avatar')->isValid()){
                //获取文件原始名称
                // $orname = $request->file('avatar')->getClientOriginalName();
                //获取文件大小
                // $size = $request->file('avatar')->getClientSize();
                $path = md5(time(). rand(100000,999999)).'.'.$request->file('avatar')->getClientOriginalExtension();
                $request->file('avatar')->move('./uploads',$path);
                //获取全部数据
                $data = $request->all();
                //将路径添加到数组中
                $data['avatar'] = './uploads/' . $path;
                $result = $request = Member::create($data);
                //判断成功跳转响应
                if($result){
                    return redirect('/');
                }
            }
        }else{
            return view('home.test.test14');
        }
    }

    //数据分页
    public function test15()
    {
        $data = Member::paginate(1);
        return view('home.test.test15', compact('data'));
    }


    //视图16.blade.php
    public function test16()
    {
        return view('home.test.test16');
    }

    //json响应
    public function test17()
    {
        $data = Member::all();
        // return json_encode($data);
        return response()->json($data);
    }


    //会话控制
    public function test18()
    {
        //session中存储一个变量
        // Session::put('name','洋洋没1');
        //Session中获取一个变量
        // echo Session::get('name');

        //Session中获取一个变量或返回一个默认值(如果变量不存在)
        // echo Session::get('gender','保密');
        //上举等价于
        // echo Session::get('gender',function(){return '男'; });
        //获取所有Session变量
        // var_dump(Session::all()); ;
        //检查一个Session是否存在
        // var_dump(Session::has('name'));
        //Session中删除一个变量
        Session::forget('name');
        //Session中删除所有变量
        Session::flush();

    }

    //缓存操作
    public function test19()
    {
        //设置一个缓存,如果存在同名则覆盖
        Cache::put('class','qz04', 10);
        Cache::put('class','312',10);
        //计数器,的自增
        Cache::add('count','0',100);
        //设置一个缓存, 但是存在同名不添加
        Cache::add('addr','京顺路99号',10);
        //永久存储
        Cache::forever('username','madongmei');
        //获取指定值
        // echo Cache::get('username');
        //获取指定的值, 如果不存在,则使用默认值替换
        // echo Cache::get('sign','这个家伙很懒, 什么也没有留下');
        //通过回调函数的方式返回默认值
        echo Cache::get('time',function(){
            return date('Y-m-d H:i:s',time());
        });
        //判断某个值是否存在
        var_dump(Cache::has('classmate'));
        var_dump(Cache::has('time')); //false, 回调函数并没有设置该缓存值
        //使用pull方法实现一次性存储
        var_dump(Cache::pull('username'));
        //直接删除某一值
        Cache::forget('addr');
        //删除全部缓存文件
        // Cache::flush();
        //递增或递减实现
        Cache::increment('count');
        Cache::increment('count',10);
        Cache::decrement('count');
        Cache::decrement('count',10);
        //设置默认时间
        $time = Cache::remember('time',100,function(){
            return date('Y-m-d H:i:s',time());
        });
        //用法设置微信accesstoken 7200s
        $access_token = Cache::remeber('time',7600,function (){
            return date('Y-m-d H:i:s',time());
        });
        //永久存储
        Cache::rememberForever('time',function(){
            return date('Y-m-d H:i:s',time());
        });
        dd($time);
    }

    //原生sql语句: select t1.id,t1.article_name,t2.author_name from article as t1 left join author as t2 on t1.author_id = t2.id
    //联表查询
    public function test20()
    {
        // DB::table('article')->select(DB::raw('t1.id,t1.article_name,t2.author_name'))->get();
        $data = DB::table('article as t1')->select('t1.id','t1.article_name','t2.author_name')->leftJoin('author as t2','t1.author_id','=','t2.id')->get();
        dd($data);
    }

    //一对一
    public function test21()
    {
        $data = \App\Home\Article::get();

        foreach($data as $key=>$value){
            echo $value->id. $value->article_name .'&emsp;'.$value->author->author_name . '&emsp;'. '<br/>';
        }
    }
    //一对多
    public function test22()
    {
        $data = \App\Home\Article::get();
        foreach($data as $key=>$value){
            echo '当前文章名称: '. $value->article_name .',&emsp;  其下评论为: <br/>';
            foreach($value->comment as $k=>$v){
                echo '&emsp;'.  $v->comment. '<br/>';
            }
        }

    }
    //多对多
    public function test23()
    {
        //查询数据
        $data = \App\Home\Article::get();
        foreach($data as $key=>$value){
            echo "当前的文章名称: " . $value->article_name . ",其所用的关键词: <br/>";
            foreach($value->keyword as $k=>$val){
                echo '&emsp;'. $val->keyword . '<br/>';
            }
        }
    }


}
